package beans;

import java.io.IOException;
import java.io.Serializable;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;

import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;

import webservice.IWebServiceCentral;
import webservice.IWebServiceCentralService;

//import org.ksoap2.serialization.KvmSerializable;
//import org.ksoap2.serialization.PropertyInfo;

public class Usuario extends Cliente implements Serializable{
	
	
	//atributos
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private String nombre;
	private String apellido;
	private Date fechaNacimiento;
	private boolean penalizado;
	private List<DiasSemana> respuestaAutomatica;
	private DiasSemana diasSem;
	private String tel;
	private String fechaNac;
	
	
	
	//construcotr	
	public Usuario(){
	
	}

	//getters y setters
	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getApellido() {
		return apellido;
	}

	public void setApellido(String apellido) {
		this.apellido = apellido;
	}

	public Date getFechaNacimiento() {
		return fechaNacimiento;
	}

	public void setFechaNacimiento(Date fechaNacimiento) {
		this.fechaNacimiento = fechaNacimiento;
	}

	public boolean getPenalizado() {
		return penalizado;
	}

	public void setPenalizado(boolean penalizado) {
		this.penalizado = penalizado;
	}
	
		
	public List< DiasSemana> getRespuestaAutomatica() {
		return respuestaAutomatica;
	}

	
	public void setRespuestaAutomatica(List< DiasSemana> respuestaAutomatica) {
		this.respuestaAutomatica = respuestaAutomatica;
	}

	public DiasSemana getDiasSem() {

        if(diasSem == null)

        	diasSem = new DiasSemana();

        return diasSem;

    }

    public void setDiasSem(DiasSemana diasSem) {

        this.diasSem = diasSem;

    }

	public String getTel() {
		return tel;
	}

	public void setTel(String tel) {
		this.tel = tel;
	}
	
	public void altaUsuario(){
		
		String [] Dias = this.getDiasSem().getDias();
		int[] Horas = this.getDiasSem().getHoras();
		String[] tels;
		tels = getTel().split("\n");
		webservice.Usuario u = new webservice.Usuario();
		
		DateFormat formatter ; 
		Date date ; 
		   formatter = new SimpleDateFormat("dd/M/yyyy");
		   try {
			date = formatter.parse(fechaNac);
			GregorianCalendar fechaN = new GregorianCalendar();
			fechaN.setTime(date); 
			XMLGregorianCalendar fechaNac = null; 
			try {
				fechaNac =	DatatypeFactory.newInstance().newXMLGregorianCalendar(fechaN);
			} catch (DatatypeConfigurationException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			u.setFechaNacimiento(fechaNac);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		u.setClave(getClave());
		u.setDireccion(getDireccion());
		u.setDocumento(getDocumento());
		u.setEmail(getEmail());
		u.setNombre(getNombre());
		u.setApellido(getApellido());
		
		
		
		
		
		
		
		if(this.getTexto()== null)
			u.setTexto("");
		else
			u.setTexto(getTexto());
		u.setUsuario(getUsuario());
		for (int n = 0; n < tels.length; n++) {
			u.getTelefonos().add(tels[n]);
		}
		
		for(int i =0; i< Dias.length;i++){
			for(int n = 0; n< Horas.length; n++){
				webservice.DiasSemana d = new webservice.DiasSemana();
				d.setDia(Dias[i]);
				d.setHora(Horas[n]);
				u.getRespuestaAutomatica().add(d);
			}
		}

		
		u.setHabilitado(true);
		int retorno = 0;
		IWebServiceCentralService wss = new IWebServiceCentralService();
		IWebServiceCentral ws = wss.getIWebServiceCentralPort();
		retorno = ws.altaUsuario(u);
		try {
			if (retorno == 1)
				FacesContext.getCurrentInstance().getExternalContext()
						.redirect("altaOkPage.jsf");

			else
				FacesContext.getCurrentInstance().getExternalContext()
						.redirect("errorPage.jsf");
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
	}

	public String getFechaNac() {
		return fechaNac;
	}

	public void setFechaNac(String fechaNac) {
		this.fechaNac = fechaNac;
	}

	

	
	
	
}
